package com.ktjy.goods.feign.fallback;

import com.ktjy.base.Q;
import com.ktjy.base.R;
import com.ktjy.goods.feign.FeignProductService;
import com.ktjy.pojo.goods.Product;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * FeignProductServiceFallback Sentinel整合OpenFeign实现服务降级（当FeignProductService服务不可用时，FeignProductServiceFallback会被调用）
 *
 * @author LILIBO
 * @since 2025-06-04
 */
@Slf4j
@Component
public class FeignProductServiceFallback implements FeignProductService {

    /**
     * 新增商品记录
     *
     * @param product 商品
     * @return R 成功返回true
     */
    @Override
    public R add(Product product) {
        log.info("[服务降级] {}", product);
        return R.failure(2, "Fallback");
    }

    /**
     * 保存或更新商品记录
     *
     * @param product 商品（带主键ID表示更新，否则为新增）
     * @return R 成功返回保存后的完整对象
     */
    @Override
    public R save(Product product) {
        log.info("[服务降级] {}", product);
        return R.failure(2, "Fallback");
    }

    /**
     * 修改商品记录
     *
     * @param product 商品
     * @return R 成功返回true
     */
    @Override
    public R update(Product product) {
        log.info("[服务降级] {}", product);
        return R.failure(2, "Fallback");
    }

    /**
     * 通过id删除一条商品记录
     *
     * @param id
     * @return R 成功返回true
     */
    @Override
    public R deleteById(Long id) {
        log.info("[服务降级] {}", id);
        return R.failure(2, "Fallback");
    }

    /**
     * 通过多个id批量删除商品记录
     *
     * @param ids
     * @return R
     */
    @Override
    public R removeByIds(List<Long> ids) {
        log.info("[服务降级] {}", ids);
        return R.failure(2, "Fallback");
    }

    /**
     * 通过id查询单条商品记录
     *
     * @param id
     * @return R
     */
    @Override
    public R getById(Long id) {
        log.info("[服务降级] {}", id);
        return R.success(new Product(id, "商品名称", "商品标题", "", "商品描述", 0.0, 0));
    }

    /**
     * 查询商品列表
     *
     * @param product 商品
     * @return R
     */
    @Override
    public R list(Product product) {
        log.info("[服务降级] {}", product);
        return R.failure(2, "Fallback");
    }

    /**
     * 分页查询商品
     *
     * @param pageNo 当前页
     * @param pageSize 每页条数
     * @param product 商品
     * @return
     */
    @Override
    public R page(Long pageNo, Long pageSize, Product product) {
        log.info("[服务降级] pageNo={}, pageSize={}, product={}", pageNo, pageSize, product);
        return R.failure(2, "Fallback");
    }

    /**
     * 分页查询商品列表
     *
     * @param pageNo 当前页
     * @param pageSize 每页条数
     * @param param 通用查询参数
     * @return 返回分页数据列表，其中count为数据总量
     */
    @Override
    public R queryPage(Long pageNo, Long pageSize, Q param) {
        log.info("[服务降级] pageNo={}, pageSize={}, param={}", pageNo, pageSize, param);
        return R.failure(2, "Fallback");
    }

}
